# -*- coding: utf-8 -*-
'''
@author: Eduardo Jorge Casaca Cardeira
@date: 26/10/2013
@obs: Esta parte do código corresponde ao processamento do ficheiro xls e criação da base de dados sqlite3.
'''

import csv
import sqlite3

# variavel que vai guardar o nº de entradas do ficheiro/base de dados.
# começa a -3 para não contar os cabeçalhos da tabela do ficheiro csv.
numero_entradas_total = -3

# abertura do ficheiro para leitura
file_reader = csv.reader(open("cna131fresultados.csv", "rb"), delimiter=";")

# calculo do nº de entradas da base para fornecer feedback ao utilizador durante a copia dos dados
for row in file_reader:
    numero_entradas_total += 1
    pass
pass

print "O número total de entradas a copiar é " + str(numero_entradas_total)

# estabelece a ligação à base de dados e cria a tabela onde serão guardados os dados.
connection = sqlite3.connect('estatisticas_candidaturas.db')

cursor = connection.cursor()

cursor.execute('''DROP TABLE IF EXISTS Dados_Candidaturas''')

connection.commit()

cursor.execute('''CREATE TABLE IF NOT EXISTS Dados_Candidaturas (Ordem INTEGER PRIMARY KEY,
                                                                Codigo_da_Instituicao INTEGER,
                                                                Codigo_do_Curso INTEGER,
                                                                Nome_da_Instituicao TEXT,
                                                                Nome_do_Curso TEXT,
                                                                Grau TEXT,
                                                                Vagas_Inicias INTEGER,
                                                                Colocados INTEGER,
                                                                Nota_de_Candidatura_do_Ultimo_Colocado_Pelo_Contingente_Geral INTEGER,
                                                                Vagas_Sobrantes INTEGER)''')

connection.commit()

# variavel que vai registar a entrada atual a ser registada na base.
# começa a -3 para não contar os cabeçalhos da tabela do ficheiro csv.
numero_entradas_atual = -3

# variaveis onde serao guardados temporariamente os dados a copiar para a tabela.
ordem = 0
codigo_instituicao = ""
codigo_curso = ""
nome_instituicao = ""
nome_curso = ""
grau = ""
vagas_iniciais = ""
colocados = ""
nota_candidatura = ""
vagas_sobrantes = ""

# abertura do ficheiro para leitura
file_reader = csv.reader(open("cna131fresultados.csv", "rb"), delimiter=";")

# por cada linha do ficheiro csv guarda os valores de cada coluna nas variaveis e
# depois faz a sua inserção nos campos correspondentes da tabela da base de dados.
for row in file_reader:
    numero_entradas_atual += 1
    if numero_entradas_atual >= 1:
        print "Copiando entrada " + str(numero_entradas_atual) + " de " + str(numero_entradas_total) + "..."
        ordem += 1
        codigo_instituicao = row[0]
        codigo_curso = row[1]
        nome_instituicao = row[2]
        nome_curso = row[3]
        grau = row[4]
        vagas_iniciais = row[5]
        colocados = row[6]
        nota_candidatura = row[7]
        vagas_sobrantes = row[8]
        command = '''INSERT INTO Dados_Candidaturas (Ordem,
                                                    Codigo_da_Instituicao,
                                                    Codigo_do_Curso,
                                                    Nome_da_Instituicao,
                                                    Nome_do_Curso,
                                                    Grau,
                                                    Vagas_Inicias,
                                                    Colocados,
                                                    Nota_de_Candidatura_do_Ultimo_Colocado_Pelo_Contingente_Geral,
                                                    Vagas_Sobrantes)
                                                    VALUES ("{0}", "{1}", "{2}", "{3}", "{4}", "{5}", "{6}", "{7}", "{8}", "{9}")'''\
                                                    .format(ordem, codigo_instituicao, codigo_curso,
                                                            nome_instituicao, nome_curso, grau, vagas_iniciais,
                                                            colocados, nota_candidatura, vagas_sobrantes)
        cursor.execute(command)
        print "Entrada " + str(numero_entradas_atual) + " de " + str(numero_entradas_total) + " copiada!"
        pass
    pass
print "Todas as entradas foram copiadas para a base de dados!"
connection.commit()
cursor.close()
connection.close()

